package test;

/**
 * @author sunzhuokun
 * @date 13:45 2024/5/10
 * @description 有一个特殊的 5键键盘，上面有 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键。
 * a键在屏幕上输出一个字母 a;
 * ctrl-c将当前选择的字母复制到剪贴板;
 * ctrl-x将当前选择的 字母复制到剪贴板，并清空选择的字母;
 * ctrl-v将当前剪贴板里的字母输出到屏幕;
 * ctrl-a 选择当前屏幕上所有字母。
 * 注意:
 * 1、剪贴板初始为空，新的内容被复制到剪贴板时会覆盖原来的内容
 * 2、当屏幕上没有字母时，ctrl-a无效
 * 3、当没有选择字母时，ctrl-c和 ctrl-x无效
 * 4、当有字母被选择时，a和ctrl-v这两个有输出功能的键会先清空选择的字母，再进行输出
 * 给定一系列键盘输入，输出最终屏幕上字母的数量。
 * 输入描述:
 * 输入为一行，为简化解析，用数字 12345代表 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键的输入，数字用空格分隔
 * 输出描述:
 * 输出一个数字，为最终屏目上字母的数量。
 * 示例:
 * 输入
 * 111
 * 输出
 * 3
 */
public class FiveKeyboardOutput_5键键盘 {

    public static void main(String[] args) {
        // 屏幕上的字
        String input = "1 1 1 5 2 4 3 4 1 4 5 1";
        // 输入a -> 输入a -> 输入a -> 全选 -> 复制 -> 黏贴 -> 剪切 -> 复制 -> 输入a -> 复制 -> 全选 -> 输入a
        String screen = "";
        boolean select = false;
        String clip = "";
        String[] split = input.split(" ");
        for (int i = 0; i < split.length; i++) {
            int op = Integer.parseInt(split[i]);
            // 选中屏幕上的内容并输出a
            if (op == 1 && select) {
                screen = "a";
                select = false;
                // 未选中屏幕中内容，输出a
            } else if (op == 1 && !select) {
                screen += "a";
                // 选中屏幕中内容并复制
            } else if (op == 2 && select) {
                clip = screen;
                // 选中屏幕中内容并剪切
            } else if (op == 3 && select) {
                clip = screen;
                screen = "";
                select = false;
                // 选中屏幕中内容，并复制
            } else if (op == 4 && select) {
                screen = clip;
                select = false;
                // 未选中屏幕中内容，复制
            } else if (op == 4 && !select) {
                screen += clip;
                // 全选
            } else if (op == 5) {
                clip = screen;
                select = true;
            }
        }
        System.out.println(screen.length());
    }

}
